#coding:utf-8
'''
Created on 2017年12月19日

@author: hj-pc
'''
from com.utls.pro_env import PROJECT_CONF_DIR
from xml.etree.ElementTree import ElementTree
import sys
from com.utls.SqoopUtil import SqoopUtil
import cmd
def resolve_conf(dt):
    #获取配置文件名
    conf_file = PROJECT_CONF_DIR + "Export.xml"
    #解析配置文件
    xml_tree = ElementTree.parse(conf_file)
    #获得task元素
    tasks = xml_tree.findall('./task')
    
    for task in tasks:
        #获得导入类型，增量导入或者全量导入
        import_type = task.attrib["type"]
        
        #获得表名集合
        tables = task.findall("./table")
        
        #用来保存待执行的sqoop命令集合
        cmds = []
        
        #迭代表名集合，解析表配置文件
        for i in range(len(tables)):
            #表名
            table_name = tables[i].text
            #表配置文件名
            table_conf_file = PROJECT_CONF_DIR + table_name + ".xml"
            
            #解析表配置文件
            xmlTree = ElementTree.parse(table_conf_file)
            
            #获取sqoop-shell节点
            sqoopNodes = xmlTree.findall("./sqoop-shell")
            
            #获取sqoop命令类型
            sqoop_cmd_type = sqoopNodes[0].attrib["type"]
            
            #获取
            praNodes = sqoopNodes[0].findall("./param")
            
            #用来保存param的信息的字典
            cmap = {}
            
            for i in range(len(praNodes)):
                #获得key属性的值
                key = praNodes[i].attrib["key"]
                #获得param标签中间的值
                value = praNodes[i].text
                #保存到字典中
                cmap[key] = value
                #首先组装成sqoop命令头
                command = "sqoop" + "--" + sqoop_cmd_type
                
                ##迭代字典将param的信息拼装成字符串
                for key in cmap.keys():
                    value = cmap[key]
                    
                    #拼装为命令
                    command += "--" + key + " " + value + "\n"
                
                #将命令加入至待执行的命令集合
                cmds.append(command)
        
    return cmds

#Python模块的入口:main 函数
if __name__ == '_main_':
    #调度模块将昨天的时间传入
    dt = sys.argv[0]
    #解析配置文件，获得sqoop命令集合
    cmds = resolve_conf(dt)
    
    print(cmds)
    #迭代集合，执行命令
    for i in range(len(cmds)):
        
        cmd = cmds[i]
        
        #执行导入过程
        SqoopUtil.execute_shell(cmd)

                